home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 November: Tool Chest / Dev.CD Nov 00 TC Disk 2.toast / mac / Sample Code / QuickTime / QuickTimeIntro / Graphic Import⁄Export / Completed Lab / MovieToImages.c < prev    next >
Encoding:
Text File  |  2000-10-06  |  6.1 KB  |  173 lines  |  [TEXT/CWIE]

  1. // Graphics Importer and Exporter Samples
  2. // This example opens a movie file, allows you to save
  3. // the movie as a sequence of frames. It then creates a new
  4. // reference movie from those images and saves it.
  5. // Originally written by Sam Bushell for QuickTime "Live" '99
  6. // WWDC 2000 Introduction to QuickTime
  7.  
  8. #include "MacShell.h"
  9.  
  10. void MovieToImage( void )
  11. {
  12.     OSErr  err = noErr;
  13.     Handle hOpenTypeList = NewHandle(0);
  14.     long  numTypes = 0;
  15.     FSSpec theFSSpec;
  16.     Boolean isSelected, isReplacing;
  17.     Rect naturalBounds, windowBounds;
  18.     WindowPtr window = NULL;
  19.     short refNum = -1, resID = NULL;
  20.     Movie movie = 0;
  21.     MovieExportComponent movieExporter = 0;
  22.     Boolean canceled = true;
  23.     MovieImportComponent movieImporter = 0;
  24.     Track usedTrack;
  25.     TimeValue addedDuration;
  26.     long outFlags;
  27.     
  28.     BuildMovieValidFileTypes( hOpenTypeList, &numTypes );
  29.     if ( !hOpenTypeList ) return;
  30.     HLock( hOpenTypeList );
  31.  
  32.     err = GetOneFileWithPreview(numTypes, (OSTypePtr)*hOpenTypeList, &theFSSpec, NULL);
  33.     EmptyHandle( hOpenTypeList );
  34.     if ( err ) return;
  35.     
  36.     // open a movie file
  37.     err = OpenMovieFile( &theFSSpec, &refNum, fsRdPerm );
  38.     err = NewMovieFromFile( &movie, refNum, &resID, NULL, newMovieActive, NULL );
  39.     err = CloseMovieFile( refNum );
  40.     refNum = -1;
  41.     
  42.     GetMovieBox( movie, &naturalBounds );
  43.     windowBounds = naturalBounds;
  44.     OffsetRect( &windowBounds, 10, 45 );
  45.     window = NewCWindow( NULL, &windowBounds, "\pMovie <-> Images", true, documentProc, (WindowPtr)-1, true, 0);
  46.     SetPortWindowPort( window );
  47.     
  48.     // play the movie
  49.     SetMovieGWorld( movie, GetWindowPort( window), NULL );
  50.     GoToBeginningOfMovie( movie );
  51.     StartMovie( movie );
  52.     while( false == IsMovieDone( movie ) ) {
  53.         MoviesTask( NULL, 0 );
  54.     }
  55.     StopMovie( movie );
  56.     
  57.     pause();
  58.  
  59.     // save the movie as a sequence of image files.
  60.     err = PutFile( "\pSave as image sequence:", "\psequence", &theFSSpec, &isSelected, &isReplacing);
  61.     if (err) return;
  62.     
  63.     // open a movie exporter
  64.     err = OpenADefaultComponent( MovieExportType,                // component type
  65.                                  GraphicsExporterComponentType, // subType
  66.                                  &movieExporter );                // component instance
  67.     
  68.     // configure the export component by showing the dialog box
  69.     err = MovieExportDoUserDialog( movieExporter,                // component instance
  70.                                    movie,                        // movie to be exported                    
  71.                                    NULL,                        // specific track to export
  72.                                    0,                            // start time
  73.                                    GetMovieDuration( movie ),    // duration to be exported
  74.                                    &canceled );                    // boolean set to true if user canceled
  75.     if( canceled ) return;
  76.     
  77.     // attach a progress function; -1 for default progress function
  78.     SetMovieProgressProc( movie, (MovieProgressUPP)-1, 0 );
  79.     
  80.     // convert the movie into a specified file(s) and type
  81.     err = ConvertMovieToFile( movie,            // movie specifier
  82.                               NULL,                // specific track for export; NULL for all tracks
  83.                               &theFSSpec,        // output file
  84.                               0,                // file type                
  85.                               0,                // file creator
  86.                               smSystemScript,    // script 
  87.                               NULL,                // resource id
  88.                               0,                // flags
  89.                               movieExporter );    // movie export component to use for the operation -- pass in a component instance
  90.                                                   // this allows setting any conversion parameters with the export component directly
  91.     
  92.     CloseComponent( movieExporter );
  93.     DisposeMovie( movie );
  94.     movie = 0;
  95.     EraseRect( &naturalBounds );
  96.     
  97.     // now re-open the sequence of image files as a reference movie
  98.     BuildGraphicsImporterValidFileTypes( hOpenTypeList, &numTypes );
  99.     HLock( hOpenTypeList );
  100.  
  101.     err = GetOneFileWithPreview(numTypes, (OSTypePtr)*hOpenTypeList, &theFSSpec, NULL);
  102.     DisposeHandle( hOpenTypeList );
  103.     if ( err ) return;
  104.  
  105.     // open a movie importer
  106.     err = OpenADefaultComponent( MovieImportType,                // component type
  107.                                  GraphicsImporterComponentType, // subType
  108.                                  &movieImporter );                // component instance
  109.     
  110.     // we're using a movie importer that imports images using graphics importers
  111.     // this subType-specific call enables the "Import Image Sequence..." behaviour,
  112.     // letting the movie importer search for adjacent files with names matching a numeric pattern.                     
  113.     GraphicsImageImportSetSequenceEnabled( movieImporter, true );
  114.     canceled = true;
  115.     
  116.     // configure the import component by showing the user dialog box
  117.     err = MovieImportDoUserDialog( movieImporter,    // component instance
  118.                                    &theFSSpec,        // source file; NULL for handle
  119.                                    NULL,            // data; NULL for file
  120.                                    &canceled );        // boolean set to true if user canceled
  121.     if( canceled ) return;
  122.     
  123.     // create the new movie
  124.     movie = NewMovie(newMovieActive);
  125.     
  126.     // do the import of the sequence
  127.     err = MovieImportFile( movieImporter,    // movie importer component instance
  128.                            &theFSSpec,        // data file
  129.                            movie,            // the movie to recieve the data
  130.                            NULL,            // specific target track
  131.                            &usedTrack,        // pointer to track that received the imported data
  132.                            0,                // time to place imported data 
  133.                            &addedDuration,    // the duration of the data added to the movie
  134.                            0,                // in flags
  135.                            &outFlags );        // out flags
  136.     CloseComponent( movieImporter );
  137.  
  138.     // play the reference movie.
  139.     SetMovieGWorld( movie, (GWorldPtr)window, NULL );
  140.     GoToBeginningOfMovie( movie );
  141.     StartMovie( movie );
  142.     while( false == IsMovieDone( movie ) ) {
  143.         MoviesTask( NULL, 0 );
  144.     }
  145.     StopMovie( movie );
  146.     
  147.     // save the reference movie.
  148.     err = PutFile( "\pSave as reference movie:", "\preference movie.mov", &theFSSpec, &isSelected, &isReplacing);
  149.     if (err) return;
  150.  
  151.     // create a movie file; has options controled by flags
  152.     err = CreateMovieFile( &theFSSpec,                        // file specifier
  153.                            FOUR_CHAR_CODE('TVOD'),            // creator
  154.                            smSystemScript,                    // script
  155.                            createMovieFileDeleteCurFile     // flags
  156.                          | createMovieFileDontOpenFile
  157.                          | createMovieFileDontCreateResFile
  158.                          | createMovieFileDontCreateMovie,
  159.                            0,                                // resRefNum; 0 to not open file 
  160.                            0 );                                // newMovie; 0 not to create movie
  161.     // open the movie
  162.     err = OpenMovieFile( &theFSSpec, &refNum, fsRdWrPerm );
  163.     resID = movieInDataForkResID;
  164.     
  165.     // add the movie resource to the file
  166.     err = AddMovieResource( movie, refNum, &resID, NULL );
  167.     err = CloseMovieFile( refNum );
  168.     
  169.     UpdateMovie( movie );
  170.     MoviesTask( NULL, 0 );
  171.     DisposeMovie( movie );
  172. }
  173.